home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / asm / alib11b.zip / CODE1.ZIP / DISPTEXT / DISPSTR.ASM < prev   
Assembly Source File  |  1990-07-08  |  3KB  |  133 lines

  1. ;------------------------------------------------------------------------------
  2. ; subroutine to display a string terminated with a zero
  3. ;  inputs ds:si point at string
  4. ;        DISPLAY_ATTRIBUTE db 70h ;default = reverse video
  5. ;        DISPLAY_ADDRESS label
  6. ;          DISPLAY_OFFSET    dw 0 ;offset of our window
  7. ;          DISPLAY_SEGMENT dw 0  ;display segment
  8. ;  outputs ds:si point at end of string
  9. ;
  10. display_string_d:
  11.     cld
  12.     les    di,DISPLAY_ADDRESS
  13.     mov    ah,DISPLAY_ATTRIBUTE
  14. mono_string_loop:
  15.     lodsb                     ;get next char.
  16.     or    al,al            ;check for zero
  17.     jz    mono_text_exit        ;jump if end found
  18.     stosw                    ;move one char. to display
  19.     jmp    short mono_string_loop    ;jump if end not found yet
  20. mono_text_exit:
  21.     ret
  22. ;============================================================================
  23. display_char:    push    bx
  24.         push    ax
  25.         mov    ah,0eh            ;tty display
  26.         mov    bh,0            ;page
  27.         int    10h
  28.         pop    ax
  29.         pop    bx
  30.         ret                
  31. ;=============================================================================
  32. ; inputs es:bx point at string
  33. ;           cx is max display count
  34. ;
  35. display_string:
  36.     mov    al,es:[bx]            ;get next char
  37.     cmp    al,0
  38.     jz    display_string_exit        ;exit if done
  39.     call    display_char
  40.     inc    bx
  41.     loop    display_string
  42. display_string_exit:
  43.     ret
  44. ;=============================================================================
  45. ; inputs  none
  46. ;
  47. display_crlf:
  48.     mov    dx,offset crlf
  49.     mov    ah,9
  50.     int    21h
  51.     ret
  52. ;=============================================================================
  53. ;  input cx=space count
  54. ;
  55. display_spaces:
  56.     mov    al,' '
  57. display_repeat:
  58.     call    display_char
  59.     loop    display_repeat
  60.     ret
  61. ;-------------------------------------------------------------------------
  62. ; display_string - display string of characters
  63. ;   INPUTS -ds:si = pointer to string (terminated with 0
  64. ;              dx = starting display address
  65. ;              bl = attribute
  66. ;   output dx - points at next display point
  67. ;
  68. local_attribute    db    0
  69.  
  70. display_string_at_posn:
  71.     push    si
  72.     mov    cs:local_attribute,bl
  73. display_loop1:
  74.     mov    bh,0            ;get page 0 code
  75.     mov    ah,2            ;set cursor position code
  76.     push    si
  77.     int    10h            ;position the cursor
  78.     pop    si
  79.     mov    cx,1            ;set replication count = 0
  80.     mov    al,[si]            ;get character
  81.     or    al,al
  82.     jz    display_string_exit    ;jump if end of sting
  83.     cmp    al,0dh            ;check if cr
  84.     jne    clf            ;  jmp if not
  85.     mov    dl,0
  86.     jmp    display_loop2
  87. clf:    cmp    al,0ah
  88.     jne    char_out
  89.     inc    dh
  90.     jmp    display_loop2
  91. char_out:
  92.     mov    ah,9            ;display char. code
  93.     mov    bl,cs:local_attribute
  94.     push    si
  95.     int    10h            ;display char.
  96.     pop    si
  97.     inc    dx
  98. display_loop2:
  99.     inc    si
  100.     jmp    display_loop1        ;loop till done
  101. ;
  102. ; hide the cursor again
  103. ;
  104. display_string_exit:
  105.     push    dx
  106.     mov    ah,2            ;get position code
  107.     mov    bh,0            ;page
  108.     mov    dx,1900h        ;row 26 column 0
  109.     int    10h
  110.     pop    dx
  111.     pop    si
  112.     ret
  113. ;-------------------------------------------------------------------------
  114. ; display list
  115. ;   inputs  ds:si = list pointer
  116. ;
  117. display_list:
  118.     mov    dx,0            ;start display at line 0
  119. list_loop:
  120.     push    si
  121.     mov    si,[si]            ;get list entry
  122.     cmp    si,0
  123.     je    list_end        ;jmp if all done
  124.     mov    bl,attribute
  125.     call    display_string_at_posn
  126.     pop    si
  127.     add    si,2
  128.     jmp    list_loop        ;loop till done
  129. list_end:
  130.     pop    si
  131.     ret    
  132. ;----------------------------------------------------------------------------
  133.